package io.debezium.connector.sqlserver.sink.util;

public class LSNUtils {

    // 解析 LSN 字符串为单个长整数
    public static long parseLSNToLong(String lsn) {
        String[] parts = lsn.split(":");
        if (parts.length != 3) {
            throw new IllegalArgumentException("Invalid LSN format: " + lsn);
        }
        // 每部分使用 16 进制解析并合并成一个长整数
        long part1 = Long.parseLong(parts[0], 16);
        long part2 = Long.parseLong(parts[1], 16);
        long part3 = Long.parseLong(parts[2], 16);

        // 使用位运算将三个部分合并成一个长整数
        return (part1 << 32) + (part2 << 16) + part3;
    }

    // 判断第一个 LSN 是否小于第二个 LSN
    public static boolean less(String lsn1, String lsn2) {
        long lsnValue1 = parseLSNToLong(lsn1);
        long lsnValue2 = parseLSNToLong(lsn2);

        // 打印用于调试的 LSN 数值
        System.out.println("LSN 1 as long: " + lsnValue1);
        System.out.println("LSN 2 as long: " + lsnValue2);

        return lsnValue1 < lsnValue2;
    }

}
